home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / security / log_tcp_6.0alpha.shar / miscd.c < prev    next >
C/C++ Source or Header  |  1993-07-02  |  3KB  |  104 lines

  1.  /*
  2.   * Front end to the ULTRIX miscd service. The front end logs the remote host
  3.   * name and then invokes the real miscd daemon. Install as "/usr/etc/miscd",
  4.   * after moving the real miscd daemon to the "/usr/etc/..." directory.
  5.   * Connections and diagnostics are logged through syslog(3).
  6.   * 
  7.   * The Ultrix miscd program implements (among others) the systat service, which
  8.   * pipes the output from who(1) to stdout. This information is potentially
  9.   * useful to systems crackers.
  10.   * 
  11.   * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
  12.   */
  13.  
  14. #ifndef lint
  15. static char sccsid[] = "@(#) miscd.c 1.4 93/03/07 22:47:28";
  16. #endif
  17.  
  18. /* System libraries. */
  19.  
  20. #include <sys/types.h>
  21. #include <sys/param.h>
  22. #include <sys/stat.h>
  23. #include <stdio.h>
  24. #include <syslog.h>
  25.  
  26. /* Local stuff. */
  27.  
  28. #include "patchlevel.h"
  29. #include "log_tcp.h"
  30.  
  31. /* The following specifies where the vendor-provided daemon should go. */
  32.  
  33. #ifndef REAL_MISCD
  34. #define REAL_MISCD    "/usr/etc/.../miscd"
  35. #endif
  36.  
  37. int     log_severity = SEVERITY;    /* run-time adjustable */
  38.  
  39. main(argc, argv)
  40. int     argc;
  41. char  **argv;
  42. {
  43.     struct from_host from;
  44.     int     from_stat;
  45.  
  46.     /* Attempt to prevent the creation of world-writable files. */
  47.  
  48. #ifdef DAEMON_UMASK
  49.     umask(DAEMON_UMASK);
  50. #endif
  51.  
  52.     /*
  53.      * Open a channel to the syslog daemon. Older versions of openlog()
  54.      * require only two arguments.
  55.      */
  56.  
  57. #ifdef LOG_MAIL
  58.     (void) openlog(argv[0], LOG_PID, FACILITY);
  59. #else
  60.     (void) openlog(argv[0], LOG_PID);
  61. #endif
  62.  
  63.     /*
  64.      * Find out and verify the remote host name. Sites concerned with
  65.      * security may choose to refuse connections from hosts that pretend to
  66.      * have someone elses host name.
  67.      */
  68.  
  69.     from_stat = fromhost(&from);
  70. #ifdef PARANOID
  71.     if (from_stat == -1)
  72.     refuse(&from);
  73. #endif
  74.  
  75.     /*
  76.      * The BSD rlogin and rsh daemons that came out after 4.3 BSD disallow
  77.      * socket options at the IP level. They do so for a good reason. Let's
  78.      * follow their example.
  79.      */
  80.  
  81. #ifdef KILL_IP_OPTIONS
  82.     fix_options(&from);
  83. #endif
  84.  
  85.     /*
  86.      * Check whether this host can access the service in argv[0]. The
  87.      * access-control code invokes optional shell commands as specified in
  88.      * the access-control tables.
  89.      */
  90.  
  91. #ifdef HOSTS_ACCESS
  92.     if (!hosts_access(argv[0], &from))
  93.     refuse(&from);
  94. #endif
  95.  
  96.     /* Report remote client and invoke the real daemon program. */
  97.  
  98.     syslog(log_severity, "connect from %s", hosts_info(&from));
  99.     (void) execv(REAL_MISCD, argv);
  100.     syslog(LOG_ERR, "%s: %m", REAL_MISCD);
  101.     clean_exit(&from);
  102.     /* NOTREACHED */
  103. }
  104.